package XZK010301AND001;

import java.util.Arrays;

/**
 * 业务目标:针对不同需求，灵活掌握 String 类及其方法
 * 技能目标:灵活应用 String 类的方法
 *
 * @author bing.z 2021/6/3 15:48
 **/
public class Demo {
    public static void main(String[] args) {
//        no1();
//        no2();
//        no3();
//        no4();
    }

    private static void no4() {
        /**
         * 4.写一个和 trim 功能相同的方法
         * 思路：
         * 1.定义两个变量，用来存储两个角标
         * 2.分别从头和尾遍历字符串，直到找到第一个不为空格的字符
         * 3.截取字符串
         */
        String text = " sadasda sadas asasa 1";
        int len = text.length();
        int l = 0, r = len - 1;
        while (l < len && text.charAt(l) == ' ') {
            l++;
        }
        while (r >= 0 && text.charAt(r) == ' ') {
            r--;
        }
        System.out.println(text.substring(l, r + 1));
    }

    private static void no3() {
        /**
         * 3. 字符串压缩:利用字符重复出现的次数，编写一种方法，实现基本的字符
         * 串压缩功能。比如,字符串“aabccdd”会变成“a2b1c2d2”。若“压缩”以后的字
         * 符串没有变短，则返回原先的字符串。你可以假设字符串中只包含大小写英文
         * 字母(a-z)
         * 示例 1：输入:aabcccccddddd
         * 输出:a2b1c5d5
         * 示例 2：输入：“abcdd” 输出:“abcdd” 解释:因为压缩后的字符串为:”a1b1c1d2”,长度大于原字符串
         */
        String src = "aabcccccddddd";
        StringBuilder ans = new StringBuilder();
        int count = 0;
        char pre = '#';
        for (char c : src.toCharArray()) {
            if (pre == '#') {
                pre = c;
                count = 1;
                continue;
            }
            if (c == pre) {
                count++;
            } else {
                ans.append(pre);
                ans.append(count);
                pre = c;
                count = 1;
            }
        }
        if (pre != '#') {
            ans.append(pre);
            ans.append(count);
        }
        System.out.println(ans.length() < src.length() ? ans : src);
    }

    private static void no2() {
        /**
         * 2. String s="name=王五 age=18 classNum=1101”;
         * 将上面的字符串中包含的信息存放到 Student（里面有 name，age，
         * classNum 三个属性）的对象中:
         */
        String s = "name=王五 age=18 classNum=1101";
        String[] strings = s.split("\\s+");
        Student student = new Student();
        for (String v : strings) {
            String[] arr = v.split("=");
            if (arr[0].equals("name")) {
                student.setName(arr[1]);
            } else if (arr[0].equals("age")) {
                student.setAge(Integer.parseInt(arr[1]));
            } else if (arr[0].equals("classNum")) {
                student.setClassNum(Integer.parseInt(arr[1]));
            }
        }
        System.out.println(student);
    }

    private static void no1() {
        /**
         * 1.编写一个方法，将一段文本中的各个单词的字母顺序翻转，
         * 例如："I like writing code best"，将变成"I ekil gnitirw edoc tseb"。
         */
        String a = "I like writing code best";
        String[] strings = a.split("\\s+");
        for (int i = 0; i < strings.length; i++) {
            strings[i] = new StringBuilder(strings[i]).reverse().toString();
        }
//        System.out.println(Arrays.toString(strings));
        StringBuilder sb = new StringBuilder();
        for (String s : strings) {
            if (sb.length() > 0) {
                sb.append(" ");
            }
            sb.append(s);
        }
        System.out.println(sb);
    }
}

class Student {
    private String name;
    private int age;
    private int classNum;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getClassNum() {
        return classNum;
    }

    public void setClassNum(int classNum) {
        this.classNum = classNum;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", classNum='" + classNum + '\'' +
                '}';
    }
}